package com.zwl.lib_base.base

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import javax.inject.Singleton

/**
 * 全局作用域的Home组件网络接口代理依赖注入模块
 *
 * @author Qu Yunshuo
 * @since 6/4/21 5:51 PM
 */
@Module //表示这一个用于提供依赖注入实例的模块。该模块定义了如何提供依赖项。在这个模块中，你可以定义方法来创建和提供对象实例。
@InstallIn(SingletonComponent::class)//这个模块中定义的依赖项将被安装在应用程序的全局单例组件中。这意味着这些依赖项将在整个应用程序的生命周期内只被创建一次，并在所有需要它们的地方共享。
class DIHomeNetServiceModule {

    /**
     * Home模块的[HomeApiService]依赖提供方法
     *
     * @param retrofit Retrofit
     * @return HomeApiService
     */
    @Provides//表示provideHomeApiService方法是一个提供依赖项的方法，Dagger Hilt会调用这些方法来获取它们提供的依赖项。也就是@Inject能拿到依赖。
    @Singleton//@Singleton 注解也用于 provideDatabase 方法上，以确保返回的 AppDatabase 实例是单例的。
    fun provideHomeApiService(retrofit: Retrofit): HomeApiService {
        return retrofit.create(HomeApiService::class.java)
    }
}